package de.ihk.beans;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;


import de.ihk.data.Bearbeiter;
import de.ihk.data.Test;
import de.ihk.datamanagment.MysqlConnector;

@ManagedBean
@ViewScoped
public class BearbeiterBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@ManagedProperty("#{loginBean}")
	private LoginBean login;

	private List<Bearbeiter> bearbeiters;
	private Bearbeiter[] selectedBearbeiters;

	private int id = 0;
	private String newName;
	private String newEMail;
	private String newKuerzel;
	private Test[] tests;

	private ResultSet rs = null;
	private MysqlConnector conn = null;

	public BearbeiterBean() throws ClassNotFoundException, SQLException {
		bearbeiters = new ArrayList<Bearbeiter>();
		System.out.println("Bearbeiters werden erstellt");
		conn = new MysqlConnector();
		updateList();

	}

	public void submit(ActionEvent actionEvent) throws SQLException {
		rs = conn.getBearbeiters();
		int maxid = 1;
		while (rs.next()) {
			if (rs.getInt(1) > maxid) {
				maxid = rs.getInt(1);
			}
		}
		System.out.println(newName + " " + newEMail);
		conn.addBearbeiterToDb(maxid+1, newName, newEMail, newKuerzel, tests);
		updateList();
	}

	public void updateList() throws SQLException {
		rs = conn.getBearbeiters();
		bearbeiters.removeAll(bearbeiters);
		while (rs.next()) {
			// TODO Tests zu Bearbeitern adden
			rs.getString(5);
			bearbeiters.add(new Bearbeiter(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), tests));
		}
		System.out.println("Updateing: " + bearbeiters);
	}

	public void deleteSelected(ActionEvent actionEvent) throws SQLException {
		for (Bearbeiter i : selectedBearbeiters) {
			System.out.println(i.getId());
			conn.mysqlUpdateQuery("DELETE FROM bearbeiter WHERE id = " + i.getId() + ";");

		}
		updateList();
	}

	public void deleteAll(ActionEvent actionEvent) throws SQLException {
		conn.mysqlUpdateQuery("TRUNCATE bearbeiter");
		updateList();
	}

	// --------------- SETTER UND GETTER

	public void setLogin(LoginBean login) {
		this.login = login;
	}

	public List<Bearbeiter> getBearbeiters() {
		return bearbeiters;
	}

	public void setBearbeiters(List<Bearbeiter> Bearbeiters) {
		this.bearbeiters = Bearbeiters;
	}

	public Bearbeiter[] getSelectedBearbeiters() {
		return selectedBearbeiters;
	}

	public void setSelectedBearbeiters(Bearbeiter[] selectedBearbeiters) {
		this.selectedBearbeiters = selectedBearbeiters;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNewName() {
		return newName;
	}

	public void setNewName(String newName) {
		this.newName = newName;
	}

	public String getNewEMail() {
		return newEMail;
	}

	public void setNewEMail(String newEMail) {
		this.newEMail = newEMail;
	}

	public String getNewKuerzel() {
		return newKuerzel;
	}

	public void setNewKuerzel(String newKuerzel) {
		this.newKuerzel = newKuerzel;
	}

	public Test[] getTests() {
		return tests;
	}

	public void setTests(Test[] tests) {
		this.tests = tests;
	}

}
